package cn.yangphere.service.base;

import java.util.LinkedHashMap;

import cn.yangphere.bean.QueryResult;

public interface Dao {

	/**
	 * 保存实体
	 * 
	 * @param entity
	 */
	public void save(Object entity);

	/**
	 * 更新实体
	 * 
	 * @param entity
	 */
	public void update(Object entity);

	/**
	 * 删除实体
	 * 
	 * @param entityId
	 */
	public <T> void delete(Class<T> entityClass, Object entityId);

	/**
	 * 删除实体
	 * 
	 * @param entityIds
	 *            实体id数组
	 */
	public <T> void delete(Class<T> entityClass, Object[] entityIds);

	/**
	 * 获取实体
	 * 
	 * @param <T>
	 * @param entityClass
	 *            实体类
	 * @param entityId
	 *            实体id
	 * @return
	 */
	public <T> T find(Class<T> entityClass, Object entityId);
	
	/**
	 * 获取分页数据
	 * @param <T> 
	 * @param entityClass 实体类
	 * @param firstIndex 开始索引
	 * @param maxResult 需要获取的记录数
	 * @param whereJpql where语句
	 * @param queryParams where参数
	 * @param orderBy key：实体属性，value：asc/desc (order by key1 desc,key2 asc)
	 * @return
	 */
	public <T> QueryResult<T> getScrollData(Class<T> entityClass,int firstIndex,int maxResult,
			String whereJpql,Object[] queryParams, LinkedHashMap<String, String> orderBy);
	
	/**
	 * 获取分页数据
	 * @param <T> 
	 * @param entityClass 实体类
	 * @param firstIndex 开始索引
	 * @param maxResult 需要获取的记录数
	 * @param whereJpql where语句
	 * @param queryParams where参数
	 * @return
	 */
	public <T> QueryResult<T> getScrollData(Class<T> entityClass,int firstIndex,int maxResult,
			String whereJpql,Object[] queryParams);
	
	/**
	 * 获取分页数据
	 * @param <T> 
	 * @param entityClass 实体类
	 * @param firstIndex 开始索引
	 * @param maxResult 需要获取的记录数
	 * @param orderBy key：实体属性，value：asc/desc (order by key1 desc,key2 asc)
	 * @return
	 */
	public <T> QueryResult<T> getScrollData(Class<T> entityClass,int firstIndex,int maxResult,
			 LinkedHashMap<String, String> orderBy);
	
	/**
	 * 获取分页数据
	 * @param <T> 
	 * @param entityClass 实体类
	 * @param firstIndex 开始索引
	 * @param maxResult 需要获取的记录数
	 * @return
	 */
	public <T> QueryResult<T> getScrollData(Class<T> entityClass,int firstIndex,int maxResult);
	
	/**
	 * 获取分页数据
	 * @param <T> 
	 * @param entityClass 实体类
	 * @return
	 */
	public <T> QueryResult<T> getScrollData(Class<T> entityClass);

}
